﻿// Inner Kit 库
// 枚举解析器
// Copyright (c) 2024 by 尔西大帝. All rights reserved.
//
// 用于通过名称获得枚举
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2024-12-03

#pragma once

#include <string>
#include <EASTL/unordered_map.h>
#include <utility>
#include <static_string.h>


namespace ikit {

template <typename T> class EnumParser {
public:
  EnumParser(const ikit::sstr* names, const T* enums, int count)
      : nameToEnumMap(count) {
    for (int i = 0; i < count; ++i) {
      nameToEnumMap[names[i].uid()] = enums[i];
    }
  }
  EnumParser(const std::pair<ikit::sstr, T>* enums, int count)
      : nameToEnumMap(count) {
    for (int i = 0; i < count; ++i) {
      nameToEnumMap[enums[i].first.uid()] = enums[i].second;
    }
  }
  EnumParser(const EnumParser&) = delete;
  EnumParser& operator=(const EnumParser&) = delete;
  ~EnumParser() = default;

private:
  // 字符串到枚举的映射
  eastl::unordered_map<size_t, T> nameToEnumMap;

public:
  // 通过名称获取枚举类型
  T Get(ikit::sstr name, T default_value) const {
    if (name.empty()) {
      return default_value;
    }
    auto it = nameToEnumMap.find(name.uid());
    if (it != nameToEnumMap.end()) {
      return it->second;
    } else {
      // 如果没有找到，返回默认构造的枚举值
      return default_value;
    }
  }
};

} // namespace ikit